package cn.cleanarch.infra.idp.s3.service;

import cn.cleanarch.infra.idp.s3.domain.entity.S3Config;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;

/**
 * S3配置缓存服务接口
 */
public interface S3ConfigCacheService {

    /**
     * 根据ID获取S3配置（带缓存）
     *
     * @param id 配置ID
     * @return S3配置
     */
    @Cacheable(value = "s3-config", key = "#id")
    S3Config getCachedById(Long id);

    /**
     * 根据业务类型获取S3配置（带缓存）
     *
     * @param businessType 业务类型
     * @return S3配置
     */
    @Cacheable(value = "s3-config-business-type", key = "#businessType")
    S3Config getCachedByBusinessType(String businessType);

    /**
     * 获取所有启用的S3配置（带缓存）
     *
     * @return 启用的配置列表
     */
    @Cacheable(value = "s3-config-enabled")
    List<S3Config> getCachedAllEnabledConfigs();

    /**
     * 清除配置缓存
     *
     * @param id 配置ID
     */
    @CacheEvict(value = {"s3-config", "s3-config-business-type", "s3-config-enabled"}, key = "#id")
    void evictConfigCache(Long id);

    /**
     * 清除所有配置缓存
     */
    @CacheEvict(value = {"s3-config", "s3-config-business-type", "s3-config-enabled"}, allEntries = true)
    void evictAllConfigCache();
}